From: Carlos Garnacho Date: Fri, 12 Jun 2015 13:05:33 +0000 (+0200) Subject: popover: Avoid hiding modal popovers if another popover is taking focus X-Git-Tag: archive/raspbian/3.24.39-1+rpi1~1^2~65^2~39^2~6614 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=a01fe14;p=gtk%2B3.0.git popover: Avoid hiding modal popovers if another popover is taking focus Due to popover modality itself, there's quite high chances the popover stealing focus has been triggered from within, so stay friendly to it. Hiding the popover here will only hide the grabbing popover too if this happens. https://bugzilla.gnome.org/show_bug.cgi?id=750741 --- diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c index 1807d65515..da4e1c1d3e 100644 --- a/gtk/gtkpopover.c +++ b/gtk/gtkpopover.c @@ -413,7 +413,14 @@ window_set_focus (GtkWindow *window, if (priv->modal && widget && gtk_widget_is_drawable (GTK_WIDGET (popover)) && !gtk_widget_is_ancestor (widget, GTK_WIDGET (popover))) - gtk_widget_hide (GTK_WIDGET (popover)); + { + GtkWidget *grab_widget; + + grab_widget = gtk_grab_get_current (); + + if (!grab_widget || !GTK_IS_POPOVER (grab_widget)) + gtk_widget_hide (GTK_WIDGET (popover)); + } } static void @@ -1746,7 +1753,14 @@ _gtk_popover_parent_grab_notify (GtkWidget *widget, if (priv->modal && gtk_widget_is_visible (GTK_WIDGET (popover)) && !gtk_widget_has_grab (GTK_WIDGET (popover))) - gtk_widget_hide (GTK_WIDGET (popover)); + { + GtkWidget *grab_widget; + + grab_widget = gtk_grab_get_current (); + + if (!grab_widget || !GTK_IS_POPOVER (grab_widget)) + gtk_widget_hide (GTK_WIDGET (popover)); + } } static void